package com.awesome.processor;

import com.awesome.javademo.annotation.BindView;

import java.util.LinkedHashSet;
import java.util.Set;

import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.TypeElement;

//// Java 7以后可以调用，为了兼容性考虑，不建议使用
//@SupportedSourceVersion(SourceVersion.RELEASE_8)
//@SupportedAnnotationTypes("com.awesome.javademo.annotation.BindView")
public class ClassProcessor extends AbstractProcessor {
    // 被注解处理工具调用
    @Override
    public synchronized void init(ProcessingEnvironment processingEnv) {
        // ProcessingEnvironment提供很多工具类，如Element、Types、Filer和Messager
        super.init(processingEnv);
    }

    // 相当于每个处理器的主函数main()
    @Override
    public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
        return false;
    }

    // 必须指定的方法，指定该注解处理器时注册给哪个注解的。它的返回值是一个字符串集合，包含该注解处理器想要处理的注解类型的合法全称。
    @Override
    public Set<String> getSupportedAnnotationTypes() {
        Set<String> annotations = new LinkedHashSet<>();
        annotations.add(BindView.class.getCanonicalName());
        return annotations;
    }

    // 指定使用的Java版本，通常返回SourceVersion.latestSupported()
    @Override
    public SourceVersion getSupportedSourceVersion() {
        return SourceVersion.latestSupported();
    }
}